package com.wulab.backend.utils;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ExcelUtils {
    public static List<List<String>> readExcel(String filePath) throws IOException {
        FileInputStream fis = new FileInputStream(new File(filePath));
        Workbook workbook = new XSSFWorkbook(fis);
        Sheet sheet = workbook.getSheetAt(0);  // 获取第一个 sheet

        List<List<String>> data = new ArrayList<>();

        for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) {  // 跳过表头
            Row row = sheet.getRow(rowIndex);
            List<String> rowData = new ArrayList<>();
            for (int colIndex = 0; colIndex < row.getLastCellNum(); colIndex++) {
                Cell cell = row.getCell(colIndex);
                rowData.add(cell != null ? cell.toString() : "");
            }
            data.add(rowData);
        }

        workbook.close();
        fis.close();

        return data;
    }

    public String getStringCellValue(Row row, int cellIndex) {
        Cell cell = row.getCell(cellIndex);
        if (cell != null) {
            switch (cell.getCellType()) {
                case STRING:
                    return cell.getStringCellValue().trim();  // 返回去掉前后空格的字符串
                case NUMERIC:
                    return String.valueOf(cell.getNumericCellValue());
                default:
                    return null;  // 对于其他类型，返回null
            }
        }
        return null;  // 如果单元格为空，返回null
    }

    // 获取整数单元格值，避免空值问题
    public Integer getIntCellValue(Row row, int cellIndex) {
        Cell cell = row.getCell(cellIndex);
        if (cell != null) {
            switch (cell.getCellType()) {
                case NUMERIC:
                    return (int) cell.getNumericCellValue();  // 直接转换为整数
                case STRING:
                    try {
                        return Integer.parseInt(cell.getStringCellValue().trim());
                    } catch (NumberFormatException e) {
                        return null;  // 如果字符串无法转换为整数，返回null
                    }
                default:
                    return null;  // 如果单元格为空或不符合预期，返回null
            }
        }
        return null;  // 如果单元格为空，返回null
    }

    // 获取双精度数值单元格值，避免空值问题
    public Double getDoubleCellValue(Row row, int cellIndex) {
        Cell cell = row.getCell(cellIndex);
        if (cell != null) {
            switch (cell.getCellType()) {
                case NUMERIC:
                    return cell.getNumericCellValue();  // 直接转换为双精度数
                case STRING:
                    try {
                        return Double.parseDouble(cell.getStringCellValue().trim());
                    } catch (NumberFormatException e) {
                        return null;  // 如果字符串无法转换为double，返回null
                    }
                default:
                    return null;  // 如果单元格为空或不符合预期，返回null
            }
        }
        return null;  // 如果单元格为空，返回null
    }
}
